package com.ideaaedi.springcloud.jd.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ideaaedi.springcloud.jd.commonds.entity.PageInfo;
import com.ideaaedi.springcloud.jd.commonds.entity.user.po.SysDictPO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDictAddReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDictListReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDictTreeReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDictUpdateReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.resp.SysDictDetailRespVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.resp.SysDictListRespVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.resp.SysDictTreeRespVO;
import org.springframework.lang.NonNull;

import java.util.Collection;
import java.util.Map;

/**
 * <p>
 * 系统-数据字典 服务类
 * </p>
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 2021.0.1.A
 */
public interface SysDictService extends IService<SysDictPO> {

    /**
     * 增
     *
     * @param req 参数
     *
     * @return 新增的数据详情
     */
    SysDictDetailRespVO add(SysDictAddReqVO req);

    /**
     * 删
     *
     * @param id 要删除数据的id
     *
     * @return 删除了的数据详情
     */
    SysDictDetailRespVO delete(Integer id);

    /**
     * 改
     *
     * @param req 参数
     *
     * @return 修改后的数据详情
     */
    SysDictDetailRespVO update(SysDictUpdateReqVO req);

    /**
     * 查详情
     *
     * @param id 要查询数据的id
     *
     * @return 数据详情
     */
    SysDictDetailRespVO detail(Integer id);

    /**
     * 查列表
     *
     * @param req 参数
     *
     * @return 数据列表
     */
    PageInfo<SysDictListRespVO> list(SysDictListReqVO req);
    
    /**
     * 查字典树
     *
     * @param req 参数
     *
     * @return 数据树(k - 字典类型code; v - (k - 字典code, v - 字典数据详情))
     */
    Map<String, Map<String, SysDictTreeRespVO>> tree(SysDictTreeReqVO req);
    
    /**
     * 查字典path-字典名 map
     *
     * @param dictPaths
     *         dictPath集合
     *
     * @return 字典path与字典名map (k - 字典dictPath; v - 字典名dictName)
     */
    @NonNull
    Map<String, String> pathAndNameMap(Collection<String> dictPaths);
}
